﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Telerik.WinControls;
using Text_Finder;
using System.Diagnostics;
using Microsoft.Build.BuildEngine;
using Microsoft.Build.Framework;
using System.Configuration;
using System.IO;
using BLL;
using System.Globalization;



namespace LanguageManagingSystem
{
    public partial class MasterWindow : Telerik.WinControls.UI.RadForm
    {
        public MasterWindow()
        {
            InitializeComponent();
            checkSearchValidation();
        }

        private void btn_PrepareForms_Click(object sender, EventArgs e)
        {
            //åbner preperationsvinduerne, hvis valget er 1 vil loopet blive ved med at køre da 1 har værdien Back.
            DoneWIthPreparation prepDone = new DoneWIthPreparation();
            while (prepDone.choise < 2)
            {
                prepDone.ResetChoise();
            FilVælger vælger = new FilVælger();
            vælger.ShowDialog();
            if (!vælger.nextPressed)
                break;
            prepDone.ShowDialog();
            }
            if (prepDone.choise == DoneWIthPreparation.CHOISEDONE)
                compileSearchWizard();
            else if (prepDone.choise == DoneWIthPreparation.CHOISENEXT)
                StartSearch();
            checkSearchValidation();
        }
        private Configuration config;
        public Configuration Config { get { config = ConfigurationManager.OpenExeConfiguration(@"LanguageApp.exe"); return config; } set { config = ConfigurationManager.OpenExeConfiguration(@"LanguageApp.exe"); } }
        //checker om det er muligt at søge efter tekster og disabler/enabler knappen
        private void checkSearchValidation()
        {//opdater konfigurationer hver gang settings har været åben så den altid har de rigtive værdier
            Config = ConfigurationManager.OpenExeConfiguration(@"LanguageApp.exe");
            btn_PrepareForms.Enabled = true;
                btn_Search.Enabled = true;
                string con = DBCommands.CheckDbConnection();
            //checker databaseforbindelsen, hvis den er gyldig vil der blive checket for tabellerne, hvis de ikke findes vil de blive skabt
                if (con != null)
                {
                    btn_PrepareForms.Enabled = false;
                    btn_Search.Enabled = false;
                    ShowErrorBox("Der var en fejl med din connectionstring: \"" + con + "\" Åbn indstillinger?", "Fejl med connection string");
                }
                else
                {
                    languageConnector.createTablesIfNotExists(new CultureInfo(Config.AppSettings.Settings["Language"].Value));
                }
                //checker om solutionfilen er gyldig
            if(!File.Exists(Config.AppSettings.Settings["SlnFile"].Value))
                {
                btn_PrepareForms.Enabled = false;
                    btn_Search.Enabled = false;
                    ShowErrorBox("Den angivede Sln fil er ugyldig, vil du åbne indstillinger og fixe det?","Ugyldig Sln fil");
                }
            //checker om der findes en kopi af controlsearcher projekt filen
            //den bliver lavet under preperations forløbet og erstatter den midlertidige med referencer efter søgningen af tekster er færdig
            if(!File.Exists(@"..\..\..\Control Searcher\Control Searcher.csproj.Original"))
            {
                btn_Search.Enabled = false;
            }
            
        }

        private void ShowErrorBox(string message,string title)
        {
        DialogResult result =  MessageBox.Show(message,title,MessageBoxButtons.YesNo,MessageBoxIcon.Error);
                    if(result == DialogResult.Yes)
                        ChangeSettings();
        }
        private void StartSearch()
        {
            WaitingMessage besked = new WaitingMessage();
            besked.Show();
            compileSearchWizard();
            openSearchWizard();
            besked.Dispose();
        }

        private void radButton1_Click(object sender, EventArgs e)
        {
            
            StartSearch();
        }

        private void openSearchWizard()
        {
            
            Process process = new Process();
            process.StartInfo.FileName = @"..\..\..\SearchControls\bin\Debug\SearchControls.exe";
            process.Start();
            process.WaitForExit();// Waits here for the process to exit.
            checkSearchValidation();
        }
        private void compileSearchWizard()
        {
            
            Engine engine = new Engine();
            FileLogger logger = new FileLogger();
            logger.Parameters = @"msbuild.log";
            engine.RegisterLogger(logger);
            string[] tasks = new string[] { "Build" };
            BuildPropertyGroup props = new BuildPropertyGroup();
            props.SetProperty("parm1", "Build");
            //compiler searchControls projektet
            try
            {
               
                bool success = engine.BuildProjectFile(@"..\..\..\SearchControls\SearchControls.csproj", tasks, props);
            }
            catch (Exception ex)
            {

            }
            finally
            {
                engine.UnregisterAllLoggers();
                engine.UnloadAllProjects();
            } 
        }

        private void btn_settings_Click(object sender, EventArgs e)
        {
            ChangeSettings();
        }

        private void ChangeSettings()
        {
new Settings().ShowDialog();
            checkSearchValidation();
        }

        private void radMenuItem3_Click(object sender, EventArgs e)
        {
            Process.Start("Readme.txt");
        }
    }
}
